预处理命令是指在编译时要预先处理的命令,一般以"#"开关,不需";"符号结尾,也一般放在文件的开头位置;
宏定义:#define 标识符字符串
简单的替换,可用#undef out终止;
在文件中的所有的标识符全部用字符串替换;
常用来定义符号常量;
使用宏定义便于书写和理解、调试,可移植;
宏定义可以引用已经定义的宏名;
对程序中用双引号包含起来的字符串内的字符,不进行宏的替换操作;
如果带有参数,只做简单的字符和参数的替换;
#include <stdio.h>用到函数库中的输入输出函数时,io;
#include后跟的文件可以用<>或""来包含,其区别在于寻找的起始路径不一样;
预处理命令是由ANSIC统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”。
经过预处理后程序可由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。
C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。
C提供的预处理功能主要有以下三种:
1.宏定义
2.文件包含
3.条件编译
这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。例如:
#define
#include
#define S(a,b) a*b
area=S(3,2);
带参数的宏和函数的区别:
这里的宏是指C语言提供的一种预处理功能;
(1) 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。
(2) 函数调用是在程序运行时处理的,为形参分配临时的内存单元。而宏展开则是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
(3) 对函数中的实参和形参类型要求一致。而宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任何类型的数据。
(4) 调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。C语言提供了#include命令用来实现“文件包含”的操作。
其一般形式为:
#include "文件名"
或 #include <文件名>
#define TaxRate 0.015
编译时代入法 compile-time substitution
而类似于const float TaxRate = 0.015,更为灵活;